Roadmap Dioscuri - Modular emulator for Digital Preservation
============================================================
Date             : 23 September 2010
Date last update : 23 September 2010
Organisations    : Koninklijke Bibliotheek,
                   Nationaal Archief of the Netherlands
                   Tessella Support Services plc.
Projects         : Dioscuri project, Planets, KEEP

Roadmap
------------------------------------------------------------
- Finalise Intel 80386 CPU (Windows 3.11 capable)
- Mouse support (ongoing)
- CD-ROM support
- Sound support
- Store/restore state functionality
- Introduce shortcut keys for menu items
- Screen data extraction support (VGA dump)
- Metadata for each module based on metadata schema
- Improve exception handling model (take care of CPU exceptions)
- Redesign 16-bit CPU architecture to follow prefetch, execution, flag settings workflow
- Improve GUI and use a better status update mechanism between GUI and modules
- Module library and software registry
- Network support
- Remote emulator control
- Wrap emulator in service-based architecture

Considerations
------------------------------------------------------------
- Performance improvements:
	+ run profiler on emulator
	+ implement CPU caching mechanism to avoid extensive recalculation of memory addressing
- Refactoring:
	+ module structure
	+ constants vs. hex values
	+ abstract classes vs. interfaces
- Testing:
	+ create unit tests, esp.for CPU instructions


Bug report
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Date found	| Date solved	| Bug description																					| Patch
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
20-06-2007  |               | Screen/video -> inbetween special characters like underscore, a blank space is included
19-06-2007  |               | GUI -> Statusbar lights for numlock, capslock and scrolllock are not working
19-06-2007  |               | Keyboard -> wrong position of cursor during emulation
14-06-2007  |               | GUI -> keyboard strokes are not given through when clicking on screen canvas in GUI
13-06-2007  |               | ATA -> hard disk and keyboard seems to have a clash with interrupting each other
13-06-2007  |               | GUI -> some keys do respond twice in GUI and emulation process
07-06-2007  |               | CPU -> some instruction have to take care of address-size and operand-size attributes (stack,etc.)| 
04-05-2007  |               | Keyboard -> Stroking too many keys in a short time causes keyboard buffer overflow                | 
19-04-2007  | 19-04-2007    | CPU -> Util functions CF_SUB and OF_SUB handle carry/borrow wrongly								| Fixed all Util CF and OF functions
19-04-2007  | 19-04-2007    | CPU -> SBB functions handle carry/borrow wrong: val1 - val2 + cf instead of val1 - (val2 + cf)    | Fixed all SBB instructions
06-04-2007	| 08-05-2007    | CPU -> prefix handling goes wrong when dealing with multiple prefixes								|
06-04-2007	| 08-05-2007    | CPU -> string instr. that use getByteFromData or getWordFromData do not take prefix into account	|
04-04-2007	| 06-06-2007    | CPU -> UnaryGRP3_Eb -> check if correct part (low/high) of registers are used 					| High/low selection of word is correctly implemented
28-02-2007	| 04-04-2007	| FDC -> wrong sectors loaded after 3rd sector														| Bug in CPU -> instruction ADD_EvGv (0x01): 16/32 bit handling went wrong
01-02-2007	| 25-04-2007    | Memory -> Implementing A20 address line support                                                   | Workaround in memory to loop above certain memaddress
01-12-2006	| 06-06-2007    | CPU -> INCDEC_GRP5 -> PUSH Ev needs to be replaced by more efficient implementation				| Replaced old code with optimized getWordFromMemorySegment()
01-12-2006	| 06-06-2007    | CPU -> IMUL/MUL -> is flag setting CF and OF correct?												| Fixed CF and OF checking
01-12-2006  |               | CPU -> DIV by 0 not handled (#DE)
01-12-2006  |               | CPU -> DIV result exceeding register size not handled (#DE)
01-12-2006  |               | CPU -> DIV/IDIV -> difference not clear: sign extension in DX of AX
01-12-2006  |               | CPU -> REP/REPE -> Unsure about the effect on ZF of the executed string instruction within this loop. Debug shows that ZF is updated afterwards when loop ends (caused by CX=0). However, we assume that ZF can be set within the string instruction (like CMPS).
01-12-2006  | 07-06-2007    | CPU -> GRP11_MOV_EvIv, GRP11_MOV_EbIb, LEA -> optimize code because it is outdated